package game.model;

import java.io.File;

/**
 * Clase juego, es la que almacena referencias a todos los objetos utilizados
 * durante el juego. Siendo una clase de back end es la encargada por medio
 * de metodos de fron end de facilitar y recibir informacion del exterior. 
 *
 */

public class Juego {
	private Tablero tablero;
	private String jugador;
	private String nivel;
	private File[] niveles;
	private int nivelActual;

	/**
	 * Constructor de la clase Juego.
	 * 
	 * @param niveles array de File con los archivos contenidos en el
	 * directorio de niveles.
	 */
	
	public Juego(File[] niveles) {
		this.niveles = niveles;
	}
	
	/**
	 * Retorna el siguiente archivo del directorio.
	 * 
	 * @return File siguiente archivo o null en caso de haber terminado la lista.
	 */
	
	public File siguienteNivel() {
		if(nivelActual < niveles.length) {
			File retorno = niveles[nivelActual];
			setNivelActual(nivelActual + 1);
			return retorno;
		} return null;
	}

	/**
	 * Setea el indice actual del nivel que se esta jugando.
	 * 
	 * @param nivelActual indice del array de Files.
	 */
	
	public void setNivelActual(int nivelActual) {
		this.nivelActual = nivelActual;
	}
	
	/**
	 * Setea el nombre del nivel, se debe conocer al momento de guardar la partida
	 * o los puntos.
	 * 
	 * @param nivel nombre del nivel.
	 */
	
	public void cambiaNivel(String nivel) {
		this.nivel = nivel;
	}
	
	/**
	 * Retorna el nombre del nivel.
	 * 
	 * @return String nombre del nivel.
	 */
	
	public String verNivel() {
		return nivel;
	}

	/**
	 * Setea el nombre del jugador, se debe conocer al momento de guardar la partida
	 * o los puntos.
	 * 
	 * @param jugador nombre del jugador.
	 */
	
	public void cambiaJugador(String jugador) {
		this.jugador = jugador;
	}
	
	/**
	 * Retorna el nombre del jugador.
	 * 
	 * @return String nombre del jugador.
	 */
	
	public String verJugador() {
		return jugador;
	}
	
	/**
	 * Guarda la referencia al tablero del nivel actual.
	 * 
	 * @param tablero tablero de juego del nivel actual.
	 */
	
	public void cambiaTablero(Tablero tablero) {
		this.tablero = tablero;
	}
	
	/**
	 * Retorna la referencia al tablero.
	 *  
	 * @return Tablero tablero del nivel actual.
	 */
	
	public Tablero getTablero() {
		return tablero;
	}
	
}
